/**
 * rgba转十六进制
 * @param r 
 * @param g 
 * @param b 
 * @returns 
 */
function rgbToHex(r, g, b) {
    // 辅助函数：确保数值在0-255范围内
    const clamp = (value) => Math.min(255, Math.max(0, parseInt(value, 10) || 0));
    
    // 转换单个分量并补零
    const toHex = (value) => clamp(value).toString(16).padStart(2, '0');
    
    // 拼接结果并转为小写（HEX通常小写）
    return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();
}

/**
 * 十六进制转rgba
 * @param hex 
 * @returns 
 */
function hexToRgb(hex) {
    // 移除#号
    hex = hex.replace('#', '');
    
    // 处理3位HEX简写
    if (hex.length === 3) {
        hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
    }
    
    // 验证是否为6位HEX
    if (hex.length !== 6) {
        return null;
    }
    
    // 解析RGB值
    const r = parseInt(hex.substring(0, 2), 16);
    const g = parseInt(hex.substring(2, 4), 16);
    const b = parseInt(hex.substring(4, 6), 16);
    
    return { r, g, b };
}